package com.cykj.page03.util;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

/**
 * @BelongsProject: HandTomcat
 * @Author: WWJ
 * @Description: 读取 servlet.properties 配置文件的工具类
 * 用于请求路径与 Servlet 类名的映射
 */
public class ServletPropUtils {

    // 全局静态 Map，用于缓存配置文件中的 key-value 键值对
    // key: 请求路径（如 /login）
    // value: Servlet 类全路径（如 com.cykj.servlet.LoginServlet）
    private final static HashMap<String, String> HASHMAP = new HashMap<>();

    // 静态代码块：类加载时只执行一次（只加载一次配置，提高性能）
    static {
        try {
            // 1. 创建 Properties 对象（专门用于加载 .properties 文件）
            Properties prop = new Properties();

            // 2. 加载配置文件（注意路径：相对路径 config/servlet.properties）
            prop.load(new FileInputStream("config/servlet.properties"));

            // 3. 遍历所有的 key（请求路径）
            Set<Object> keySet = prop.keySet();  // 获取 Properties 对象中的所有键
            Iterator<Object> it = keySet.iterator();  // 获取键集合的迭代器，用于遍历所有键

            while (it.hasNext()) {  // 当迭代器还有元素时，继续循环
                // 取出 key 和对应的 value
                String key = (String) it.next();  // 获取下一个键，并强制转换为 String 类型
                String value = prop.getProperty(key);  // 根据 key 获取对应的值，存入 value

                // 存入自定义的 HASHMAP 中
                HASHMAP.put(key, value);  // 将 key 和 value 存入自定义的 HashMap 中
            }


            // 4. 打印 Map 内容（调试用）
            System.out.println(HASHMAP);

        } catch (IOException e) {
            // 捕获异常：读取失败时抛出运行时异常，程序会停止，方便发现问题
            throw new RuntimeException("配置文件读取失败", e);
        }
    }

    /**
     * 公共静态方法，供外部调用，用于获取 Servlet 的类路径
     *
     * @param key 请求路径，如 "/login"
     * @return Servlet 类名全路径，如 "com.cykj.servlet.LoginServlet"
     */
    public static String getServletName(String key) {
        return HASHMAP.get(key);
    }
}
